home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cug172 / lexlex.h < prev    next >
C/C++ Source or Header  |  1986-02-05  |  5KB  |  162 lines

  1. /*
  2.   HEADER: CUG     nnn.nn;
  3.   TITLE:     LEX - A Lexical Analyser Generator
  4.   VERSION:     1.0 for IBM-PC
  5.   DATE:      Jan 30, 1985
  6.   DESCRIPTION:     A Lexical Analyser Generator. From UNIX
  7.   KEYWORDS:     Lexical Analyser Generator YACC C PREP
  8.   SYSTEM:     IBM-PC and Compatiables
  9.   FILENAME:      LEXLEX.H
  10.   WARNINGS:     This program is not for the casual user. It will
  11.          be useful primarily to expert developers.
  12.   CRC:         N/A
  13.   SEE-ALSO:     YACC and PREP
  14.   AUTHORS:     Scott Guthery 11100 leafwood lane Austin, TX 78750
  15.   COMPILERS:     DESMET-C
  16.   REFERENCES:     UNIX Systems Manuals
  17. */
  18. /*
  19.  * lex -- header file for lex.c
  20.  *
  21.  * Modified 02-Dec-80 Bob Denny -- Conditionalize debug code for smaller size
  22.  *                                 Turn on debug code when overlaid.
  23.  *          03-Dec-80 Bob Denny -- Change allocations for moves, nfa's and
  24.  *                                  dfa's for RT-11. Try these for RSX if
  25.  *                                  you overlay the same way.
  26.  *          28-May-81 Bob Denny -- Change allocations for both RT and RSX.
  27.  *                                  Overlay is same. Debug code adds little
  28.  *                                  task space. Delete externs which caused
  29.  *                                  TKB to barf.
  30.  *          28-Aug-81 Bob Denny -- Add extern int sflag for "-s" support.
  31.  *          30-Oct-82 Bob Denny -- Change allocations for RSX.
  32.  *          15-Apr-83 Bob Denny -- Add big allocations for VAX-11 C
  33.  *            20-Nov-83 Scott Guthery -- Adapt for IBM PC & DeSmet C
  34.  */
  35.  
  36. #define DEBUG    YES
  37.  
  38. /*
  39.  * Original allocations.
  40.  */
  41. #define NCHARS  0400    /* Size of character set */
  42. #define NCPW    2       /* # characters per word */
  43. #define NBPC    8       /* # bits per character */
  44. #define NBPW    (NCPW*NBPC)     /* # bits per word */
  45.  
  46. #define MAXNFA  600     /* Number of NFA states */
  47. #define MAXDFA  800     /* Number of DFA states */
  48. #define NTRANS  128     /* Number of translations */
  49. #define NCCLS    50     /* Number of character classes */
  50. #define NNEXT  2400     /* Size of dfa move vectors (later: allocate) */
  51.  
  52. /*
  53.  * Special node characters.
  54.  */
  55. #define CCL     NCHARS          /* One of a character class */
  56. #define EPSILON NCHARS+1        /* Transition on epsilon */
  57. #define FIN     NCHARS+2        /* Final state; NFA */
  58.  
  59. /*
  60.  * Set of state numbers (dfa state name).
  61.  */
  62. struct  set {
  63.         struct set *s_next;
  64.         struct  dfa     *s_state;       /* pointer into dfa array  */
  65.         struct  set     *s_group;       /* pointer to owning group (dfamin) */
  66.         int     s_final;                /* nf state which matches  */
  67.         char    s_flag;                 /* see below */
  68.         int     s_look;                 /* look-ahead bits */
  69.         int     s_len;                  /* number of elements in set */
  70.         struct nfa *s_els[1];
  71. };
  72.  
  73. /*
  74.  * State entry
  75.  */
  76. struct  nfa {
  77.         int     n_char;
  78.         char    *n_ccl;
  79.         char    n_flag;
  80.         char    n_look;         /* lookahead index */
  81.         struct  nfa     *n_succ[2];
  82.         struct  trans   *n_trans;
  83. };
  84.  
  85. /*
  86.  * DFA transition entry.
  87.  */
  88. struct  move {
  89.         struct  set     *m_next;
  90.         struct  dfa     *m_check;
  91. };
  92.  
  93. /*
  94.  * Structure of DFA vector.
  95.  */
  96. struct  dfa {
  97.         struct  set     *df_name;
  98.         struct  move    *df_base;
  99.         struct  move    *df_max;
  100.         struct  dfa     *df_default;
  101.         int     df_ntrans;
  102. };
  103.  
  104. /*
  105.  * s_flag values for DFA node
  106.  */
  107.  
  108. #define LOOK    01      /* Lookahead mark */
  109. #define ADDED   02      /* DFA construction mark */
  110. #define FLOOK   04      /* Mark on final state of lookahead translation */
  111.  
  112. /*
  113.  * Flag used to print node
  114.  */
  115. #define NPRT    010     /* NFA node printed */
  116.  
  117. /*
  118.  * Transition set.
  119.  */
  120. struct  xset {
  121.         struct  set     *x_set;
  122.         char    x_char;
  123.         char    x_defsame;
  124. };
  125.  
  126. /*
  127.  * Translations
  128.  */
  129. struct  trans {
  130.         struct  nfa     *t_start;
  131.         struct  nfa     *t_final;
  132. };
  133.  
  134. /*
  135.  * External definitions.
  136.  */
  137. extern  struct  trans   trans[];
  138. extern  struct  trans   *transp;
  139. extern  struct  nfa     nfa[];
  140. extern  struct  nfa     *nfap;
  141. extern  struct  dfa     dfa[];
  142. extern  int     ndfa;
  143. extern  struct  move    move[];
  144. extern  struct  xset    sets[];
  145. extern  char    insets[];
  146. extern  struct  set     *setlist;
  147. extern  char    ccls[][(NCHARS+1)/NBPC];
  148. extern  int     nccls;
  149. extern  int     llnxtmax;
  150. extern  char    *tabname;
  151. extern  FILE    llout;
  152. extern  FILE    lexin;
  153. extern  int     aflag;
  154. extern  int     sflag;
  155. extern  char    *infile;
  156.  
  157. #ifdef DEBUG
  158. extern  FILE    lexlog;
  159. extern  int     lldebug;
  160. extern  int     mflag;
  161. #endif
  162.